#ifndef ADDR_NTOP_H_
#define ADDR_NTOP_H_

#include <netinet/in.h>

#define SOCKADDR_NTOP_BUFLEN	(INET6_ADDRSTRLEN + 7) /* sockaddr_ntop 函数需求的缓存长度 */

int sockaddrcmp(const void *a, const void *b);

/* sockaddr_ntop 将网络地址结构转换成易读的形式(可打印)保存到给定缓存中
 *
 * 参数：addr 网络地址结构 (value)
 *      buf 存放可打印地址的缓存 (result)
 *      buflen 缓存的最大长度 (value)
 *
 * 返回：成功返回缓存的可打印地址，失败返回NULL
 */
const char *sockaddr_ntop(const void *addr, char *buf, size_t buflen);

/* sockname_ntop 获取socket的绑定地址并以易读的形式(可打印)保存在给定的缓存中
 *
 * 参数：sock 已连接的socket (value)
 *      buf 存放可打印地址的缓存 (result)
 *      buflen 缓存的最大长度 (value)
 *
 * 返回：成功返回缓存的可打印地址，失败返回NULL
 */
const char *sockname_ntop(int sock, char *buf, size_t buflen);

/* peername_ntop 获取已连接socket的对方地址并以易读的形式(可打印)保存在给定的缓存中
 *
 * 参数：sock 已连接的socket (value)
 *      buf 存放可打印地址的缓存 (result)
 *      buflen 缓存的最大长度 (value)
 *
 * 返回：成功返回缓存的可打印地址，失败返回NULL
 */
const char *peername_ntop(int sock, char *buf, size_t buflen);

#endif /* ADDR_NTOP_H_ */
